package domain;

import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Vector;

import persistencia.AdministradorPersistenciaFacturas;
import view.FacturaView;

public class Factura implements Persistible {
	private Date fecha;
	private Date inicioPeriodo;
	private Date finPeriodo;
	private float importeTotal;
	private Usuario usuario;
	private HashMap<Consumo, ItemFactura> itemFactura;
	private int idFactura;

	public Factura(int id, Date fechaDeHoy, Date inicioPeriodo,
			Date finPeriodo, float importe, Usuario usuario) {
		this.idFactura = id;
		this.fecha = fechaDeHoy;
		this.inicioPeriodo = inicioPeriodo;
		this.finPeriodo = finPeriodo;
		this.usuario = usuario;
		this.importeTotal = importe;
		this.itemFactura = new HashMap<Consumo, ItemFactura>();
	}

	public int getIdFactura() {
		return idFactura;
	}

	public void setIdFactura(int idFactura) {
		this.idFactura = idFactura;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public Date getInicioPeriodo() {
		return inicioPeriodo;
	}

	public void setInicioPeriodo(Date inicioPeriodo) {
		this.inicioPeriodo = inicioPeriodo;
	}

	public Date getFinPeriodo() {
		return finPeriodo;
	}

	public void setFinPeriodo(Date finPeriodo) {
		this.finPeriodo = finPeriodo;
	}

	public float getImporteTotal() {
		return importeTotal;
	}

	public void setImporteTotal(float importeTotal) {
		this.importeTotal = importeTotal;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Collection<ItemFactura> getItemsFactura() {
		return itemFactura.values();
	}

	public void addItemFactura(ItemFactura item) {
		ItemFactura c = itemFactura.get(item.getConsumo());

		if (c == null) {
			itemFactura.put(item.getConsumo(), item);
			c = item;
		} else {
			c.sumCosto(item.getCosto());
		}
		
		setImporteTotal(getImporteTotal() + c.getCosto());
	}

	public FacturaView getView() {
		return new FacturaView(this.idFactura, this.inicioPeriodo,
				this.finPeriodo, this.importeTotal, null);
	}

	@Override
	public void persistir() {
		//setImporteTotal();
		AdministradorPersistenciaFacturas.getInstancia().insert(this);

	}	

	@Override
	public int getId() {
		// TODO Auto-generated method stub
		return 0;
	}

	public static Vector<Factura> getFacturas(int idCliente) {
		return AdministradorPersistenciaFacturas.getInstancia().getFacturasCliente(idCliente);
	}	
}
